package org.upo.eps.it.phama.bean;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Cascade;

@Entity
@Table(name = "far_pedido_cliente", catalog = "phama")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class PedidoCliente implements Serializable {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "ID_PEDIDO_CLI", unique = true, nullable = false)
    private Integer idPedidoCli;
    
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="ESTADO", nullable=false)
    private Estado estado;
    
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="ID_CLIENTE", nullable=false)
    private Cliente cliente;
     
    @Temporal(TemporalType.DATE)
    @Column(name = "FECHA", length = 10)
    private Date fecha;
    
    @Column(name = "NOTAS")
    private String notas;
    
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "pedidoCliente")    
    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private Set<DetallePedCli> misDetallesPedCli = new HashSet<>(0);

    //<editor-fold defaultstate="collapsed" desc="constructors">
    public PedidoCliente() {
    }

    public PedidoCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public PedidoCliente(Estado estado, int idPedido, Date fecha, String notas) {
        this.estado = estado;
        this.idPedidoCli = idPedido;
        this.fecha = fecha;
        this.notas = notas;
    }
    
    public PedidoCliente(Estado estado, Cliente cliente, Date fecha, String notas) {
        this.estado = estado;
        this.cliente = cliente;
        this.fecha = fecha;
        this.notas = notas;
    }
    
    public PedidoCliente(Cliente cliente, Date fecha, String notas, Estado estado, Set<DetallePedCli> misDetallesPedCli) {
        this(estado, cliente, fecha, notas);
        this.misDetallesPedCli = misDetallesPedCli;
    }
    //</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="getters & setters">
    public Integer getIdPedidoCli() {
        return this.idPedidoCli;
    }
    
    public void setIdPedidoCli(Integer idPedidoCli) {
        this.idPedidoCli = idPedidoCli;
    }
    
    public Cliente getCliente() {
        return this.cliente;
    }
    
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
    
    public Date getFecha() {
        return this.fecha;
    }
    
    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }
    
    public String getNotas() {
        return this.notas;
    }
    
    public void setNotas(String notas) {
        this.notas = notas;
    }
    
    public Estado getEstado() {
        return this.estado;
    }
    
    public void setEstado(Estado estado) {
        this.estado = estado;
    }
    
    public Set<DetallePedCli> getMisDetallesPedCli() {
        return this.misDetallesPedCli;
    }
    
    public void setMisDetallesPedCli(Set<DetallePedCli> misDetallesPedCli) {
        this.misDetallesPedCli = misDetallesPedCli;
    }
    //</editor-fold>
}
